10 POKE56,56:POKE52,56:CLR 12 POKE53281,0:POKE53280,0:PRINT"[147]":TI$="000000":GOSUB60000 14 IFTI$<"000005"THEN14 20 TP$="[145] [176][192][192][192][174][176][192][192][192][174][176][192][192][192][174][176][192][192][192][174]" 30 BT$="[145] [173][192][192][192][189][173][192][192][192][189][173][192][192][192][189][173][192][192][192][189]" 100 DV=PEEK(186):IFDV<8THENDV=8 200 REM SYS57812"CALC FONT",DV,0:POKE780,0:POKE781,0:POKE782,56:SYS65493 220 PRINT"[147]"CHR$(142) 230 POKE53281,0:POKE646,0:POKE53272,25:POKE788,52 232 GOSUB5000 240 DIM K%(27),VM(19,4) 250 GOSUB 3600:REM INITIALIZE K% 260 REM CALCULATOR 270 REM MD=-1 FOR DECIMAL 280 REM MD= 1 FOR HEXADECIMAL 290 REM EE=1 MEANS INPUT EVALUATED 300 REM EE=0 MEANS EVALUATION NEEDED 310 REM EE=-1 MEANS EVAL DONE AFTER UNARY OPERATOR 320 REM K0% HOLDS KEYPRESS TO TURN OFF 330 REM K1% HOLDS KEYPRESS TO TURN ON 340 REM K2% HOLDS 2ND KEY TO TURN OFF 350 REM K3% HOLDS OLD OPERATOR KEY 360 REM NOTE: -1 MEANS SKIP TURNING ON/OFF 370 OP=0:REM NULL OPERATOR 380 MD=-1:BA=10:T1=0:T2=0:TM=0:LA=2:EE=1:ER=0 390 K0%=-1:K1%=-1:K2%=-1:K3%=-1 400 POKE214,0:PRINT:PRINTTAB(24)""; 410 A$="":GET A$:IF A$="" THEN 410 412 XQ=POS(1):POKE781,24:SYS59903:POKE214,0:PRINT:PRINTTAB(XQ)""; 420 IF ER THEN 1990 430 IF A$<"0" OR A$>"9"THEN 560 440 IF EE THEN GOSUB 3210:EE=0 450 IF LA>=9 THEN 410 460 IF MD>0 AND LA>=5 THEN 410 470 LA=LA+1 480 T$(LA)=A$ 490 T2=0 500 PRINT A$; 510 K0%=K1% 520 K1%=ASC(A$)-48 530 K2%=-1 540 GOTO 2240 550 REM CHECK HEX DIGITS 560 IF A$<"A" OR A$>"F" THEN 690 570 IF MD<0 THEN 410 580 IF EE THEN GOSUB 3210:EE=0 590 IF LA>=5 THEN 410 600 LA=LA+1 610 T$(LA)=A$ 620 T2=0 630 PRINT A$; 640 K0%=K1% 650 K1%=ASC(A$)-55 660 K2%=-1 670 GOTO 2240 680 REM EVALUATE ADDITION 690 IF A$<>"+" THEN 780 700 IF EE<=0 THEN GOSUB 2470 710 OP=1 720 K0%=K1% 730 K1%=19 740 K2%=K3% 750 K3%=K1% 760 GOTO 2240 770 REM EVALUATE SUBTRACTION 780 IF A$<>"-" THEN 870 790 IF EE<=0 THEN GOSUB 2470 800 OP=2 810 K0%=K1% 820 K1%=18 830 K2%=K3% 840 K3%=K1% 850 GOTO 2240 860 REM EVALUATE MULTIPLICATION 870 IF A$<>"*" THEN 960 880 IF EE<=0 THEN GOSUB 2470 890 OP=3 900 K0%=K1% 910 K1%=16 920 K2%=K3% 930 K3%=K1% 940 GOTO 2240 950 REM EVALUATE DIVISION 960 IF A$<>"/" THEN 1050 970 IF EE<=0 THEN GOSUB 2470 980 OP=4 990 K0%=K1% 1000 K1%=17 1010 K2%=K3% 1020 K3%=K1% 1030 GOTO 2240 1040 REM EVALUATE RESULT 1050 IF A$<>"=" THEN 1150 1060 IF EE<=0 THEN GOSUB 2470 1070 OP=0 1080 T2=TM 1090 K0%=K1% 1100 K1%=20 1110 K2%=K3% 1120 K3%=K1% 1130 GOTO 2240 1140 REM EVALUATE COMPLEMENT 1150 IF A$<>"@" THEN 1290 1160 IF EE=0 THEN GOSUB 3290:EE=-1 1170 IF ER THEN 1240 1180 T0=-T1 1190 IF EE>0 THEN T0=-TM 1200 GOSUB 3210 1210 GOSUB 2810 1220 IF EE<=0 THEN T1=T0 1230 IF EE>0 THEN TM=T0 1240 K0%=K1% 1250 K1%=22 1260 K2%=-1 1270 GOTO 2240 1280 REM EVALUATE BASE CONVERSION 1290 IF A$<>"_" THEN 1530 1300 IF EE=0 THEN GOSUB 3290:EE=-1 1310 IF ER THEN 1480 1320 MD=-MD 1330 T0=T1 1340 IF EE>0 THEN T0=TM 1350 IF MD>0 THEN 1410 1360 BA=10 1370 POKE 1100,4 1380 POKE 1101,5 1390 POKE 1102,3 1400 GOTO 1450 1410 BA=16 1420 POKE 1100,8 1430 POKE 1101,5 1440 POKE 1102,24 1450 GOSUB 3210 1460 GOSUB 2810:REM DISPLAY T0 1470 IF EE>0 THEN TM=T0:T2=T0 1480 K0%=K1% 1490 K1%=23 1500 K2%=-1 1510 GOTO 2240 1520 REM EVALUATE DELETE 1530 IF A$<>CHR$(20) THEN 1620 1540 IF EE OR LA<=0 THEN 410 1550 LA=LA-1 1560 PRINT"[157] [157]"; 1570 K0%=K1% 1580 K1%=-1:REM TURN OFF ONLY 1590 K2%=-1 1600 GOTO 2240 1610 REM EVALUATE AND 1620 IF A$<>"&" THEN 1710 1630 IF EE<=0 THEN GOSUB 2470 1640 OP=5 1650 K0%=K1% 1660 K1%=24 1670 K2%=K3% 1680 K3%=K1% 1690 GOTO 2240 1700 REM EVALUATE OR 1710 IF A$<>"%" THEN 1800 1720 IF EE<=0 THEN GOSUB 2470 1730 OP=6 1740 K0%=K1% 1750 K1%=25 1760 K2%=K3% 1770 K3%=K1% 1780 GOTO 2240 1790 REM EVALUATE NOT 1800 IF A$<>"#" THEN 1990 1810 IF EE=0 THEN GOSUB 3290:EE=-1 1820 IF ER THEN 1940 1830 REM NORMALIZE ARGUMENT 1840 IF EE>0 THEN 1880 1850 IF T1>32767 THEN T1=T1-65536 1860 T0=NOT T1 1870 GOTO 1900 1880 IF TM>32767 THEN TM=TM-65536 1890 T0=NOT TM 1900 GOSUB 3210 1910 GOSUB 2810 1920 IF EE<=0 THEN T1=T0 1930 IF EE>0 THEN TM=T0 1940 K0%=K1% 1950 K1%=26 1960 K2%=-1 1970 GOTO 2240 1980 REM EVALUATE CLEAR 1990 IF A$<>CHR$(147) THEN 2130 2000 T2=0 2010 TM=0 2020 GOSUB 2790 2030 EE=1 2040 OP=0 2050 ER=0 2060 EM=0:GOSUB 3540:REM ERASE MESSAGE 2070 K0%=K1% 2080 K1%=21 2090 K2%=K3% 2100 K3%=K1% 2110 GOTO 2240 2120 REM EVALUATE OFF 2130 IF A$<>"Q" THEN 410 2132 XQ=POS(1) 2140 EM=4:GOSUB 3540:REM DISPLAY PROMPT 2150 A$="":GET A$:IF A$="" THEN 2150 2160 IF A$="Y" THEN 2190 2170 POKE781,24:SYS59903:REM ERASE PROMPT 2172 POKE214,0:PRINT:PRINTTAB(XQ)""; 2180 GOTO 410 2190 POKE788,49:GOTO40000 2230 REM LIGHT UP KEYS 2240 IF K0%<0 THEN 2310 2250 AD=1034+K%(K0%) 2260 POKE AD,PEEK(AD) OR 128 2270 AD=AD+1 2280 POKE AD,PEEK(AD) OR 128 2290 AD=AD+1 2300 POKE AD,PEEK(AD) OR 128 2310 IF K1%<0 THEN 2380 2320 AD=1034+K%(K1%) 2330 POKE AD,PEEK(AD) AND 127 2340 AD=AD+1 2350 POKE AD,PEEK(AD) AND 127 2360 AD=AD+1 2370 POKE AD,PEEK(AD) AND 127 2380 IF K2%<0 THEN 410 2390 AD=1034+K%(K2%) 2400 POKE AD,PEEK(AD) OR 128 2410 AD=AD+1 2420 POKE AD,PEEK(AD) OR 128 2430 AD=AD+1 2440 POKE AD,PEEK(AD) OR 128 2450 GOTO 410 2460 REM EVALUATE PREV OPERATION 2470 IF EE=0 THEN GOSUB 3290 2480 EE=1 2490 IF ER THEN RETURN 2500 ON OP+1 GOTO 2510, 2560, 2590, 2620, 2650, 2690, 2740 2510 REM NULL OPERATOR 2520 TM=T2+T1 2530 T1=0 2540 RETURN 2550 REM ADDITION 2560 TM=TM+T1 2570 GOTO 2790 2580 REM SUBTRACTION 2590 TM=TM-T1 2600 GOTO 2790 2610 REM MULTIPLICATION 2620 TM=TM*T1 2630 GOTO 2790 2640 REM DIVISION 2650 IF T1=0 THEN EM=3:GOTO 3470 2660 TM=TM/T1 2670 GOTO 2790 2680 REM LOGICAL AND 2690 IF T1>32767 THEN T1=T1-65536 2700 IF TM>32767 THEN TM=TM-65536 2710 TM=TM AND T1 2720 GOTO 2790 2730 REM LOGICAL OR 2740 IF T1>32767 THEN T1=T1-65536 2750 IF TM>32767 THEN TM=TM-65536 2760 TM=TM OR T1 2770 GOTO 2790 2780 REM DISPLAY RESULT 2790 T1=0:T0=TM 2800 GOSUB 3210 2810 IF MD>0 THEN 2890 2820 REM DISPLAY DECIMAL 2830 IF EM>0 THEN EM=0:GOSUB 3540 2840 T0$=STR$(T0) 2850 LA=LA+LEN(T0$) 2860 PRINT T0$; 2870 RETURN 2880 REM HEX CONVERSION 2890 IF T0<-32768 THEN 3100 2900 IF T0> 65535 THEN 3100 2910 N=SGN(T0)*INT(ABS(T0)) 2920 T0=N 2930 M=-16:REM LEADING SPACE 2940 IF N>=0 THEN 2970 2950 M= 15:REM LEADING F 2960 N=N+65536 2970 GOSUB 3160 2980 M=INT(N/4096) 2990 GOSUB 3160 3000 N=N-4096*M 3010 M=INT(N/256) 3020 GOSUB 3160 3030 N=N-256*M 3040 M=INT(N/16) 3050 GOSUB 3160 3060 M=N-16*M 3070 GOSUB 3160 3080 RETURN 3090 REM HEX OVERFLOW 3100 PRINT "OVERFLOW"; 3110 LA=LA+8 3120 EM=2 3130 GOSUB 3540:REM DISPLAY MESSAGE 3140 RETURN 3150 REM DISPLAY HEX DIGIT 3160 IF M<10 THEN HX$=CHR$(48+M) 3170 IF M>=10 THEN HX$=CHR$(55+M) 3180 PRINT HX$; 3190 LA=LA+1 3200 RETURN 3210 REM ERASE INPUT 3220 IF LA=0 THEN RETURN 3230 FOR I=1 TO LA 3240 PRINT "[157] [157]"; 3250 NEXT I 3260 LA=0 3270 RETURN 3280 REM EVALUATE INPUT STRING 3290 IF LA=0 THEN RETURN 3300 T1=0 3310 FOR I=1 TO LA 3320 AA$=T$(I) 3330 IF AA$<"0" OR AA$>"9" THEN 3370 3340 T1=T1*BA 3350 T1=T1+ASC(AA$)-48 3360 GOTO 3400 3370 IF AA$<"A" OR AA$>"F" THEN 3400 3380 T1=T1*BA 3390 T1=T1+ASC(AA$)-55 3400 NEXT I 3410 IF MD<0 THEN RETURN 3420 REM CHECK SIGN BIT 3430 IF T1>65535 THEN T1=T1-1048576 3440 IF T1>-32769 THEN RETURN 3450 EM=1 3460 REM INPUT ERROR 3470 GOSUB 3210 3480 PRINT "ERROR"; 3490 LA=5 3500 GOSUB 3540:REM DISPLAY MESSAGE 3510 ER=1 3520 RETURN 3530 REM DISPLAY ERROR MESSAGE 3540 AM=2003 3550 FOR I=0 TO 19 3560 AM=AM+1 3570 POKE AM,VM(I,EM) 3580 NEXT 3590 RETURN 3600 REM INITIALIZE ARRAY OF KEY POSNS 3610 K%( 0)=891 3620 K%( 1)=771 3630 K%( 2)=776 3640 K%( 3)=781 3650 K%( 4)=651 3660 K%( 5)=656 3670 K%( 6)=661 3680 K%( 7)=531 3690 K%( 8)=536 3700 K%( 9)=541 3710 K%(10)=411 3720 K%(11)=416 3730 K%(12)=421 3740 K%(13)=291 3750 K%(14)=296 3760 K%(15)=301 3770 K%(16)=546 3780 K%(17)=426 3790 K%(18)=666 3800 K%(19)=786 3810 K%(20)=906 3820 K%(21)=306 3830 K%(22)=896 3840 K%(23)=901 3850 K%(24)=171 3860 K%(25)=176 3870 K%(26)=181 3880 K%(27)=186 3890 REM INITIALIZE ERROR MESSAGE ARRAY 3900 FOR J=0 TO 4 3910 FOR I=0 TO 19 3920 READ VM(I,J) 3940 NEXT 3950 NEXT 3960 RETURN 3970 DATA 160,160,160,160,160 3980 DATA 160,160,160,160,160 3990 DATA 160,160,160,160,160 4000 DATA 160,160,160,160,160 4010 DATA 62, 9,12,12, 5 4020 DATA 7, 1,12,32,14 4030 DATA 5, 7,32,14,21 4040 DATA 13, 2, 5,18,60 4050 DATA 62,62,20,15,15 4060 DATA 32,12, 1,18, 7 4070 DATA 5,32, 6,15,18 4080 DATA 32, 8, 5,24,60 4090 DATA 62,62,62, 4, 9 4100 DATA 22, 9, 4, 5,32 4110 DATA 2,25,32,26, 5 4120 DATA 18,15,60,60,60 4130 DATA 17,21, 9,20,63 4140 DATA 32, 1,18, 5,32 4150 DATA 25,15,21,32,19 4160 DATA 21,18, 5,63,32 5000 PRINT""TAB(20)"[176][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][174]" 5002 PRINTTAB(20)"[145][221][159] [146]DEC[221]" 5004 PRINTTAB(20)"[145][173][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][192][189]" 5006 PRINTTP$ 5008 PRINTTAB(20)"[145][221]AND[146][221][221]O R[146][221][221]NOT[146][221][221]OFF[146][221]" 5010 PRINTTAB(20)"[145][173][192]&[192][189][173][192]%[192][189][173][192]#[192][189][173][192]Q[192][189]" 5012 PRINTTP$ 5014 PRINTTAB(20)"[145][221] D [146][221][221] E [146][221][221] F [146][221][221]CLR[146][221]" 5016 PRINTBT$ 5018 PRINTTP$ 5020 PRINTTAB(20)"[145][221] A [146][221][221] B [146][221][221] C [146][221][221][149] / [146][221]" 5022 PRINTBT$ 5024 PRINTTP$ 5026 PRINTTAB(20)"[145][221][154] 7 [146][221][221][154] 8 [146][221][221][154] 9 [146][221][221][149] * [146][221]" 5028 PRINTBT$ 5030 PRINTTP$ 5032 PRINTTAB(20)"[145][221][154] 4 [146][221][221][154] 5 [146][221][221][154] 6 [146][221][221][149] - [146][221]" 5034 PRINTBT$ 5036 PRINTTP$ 5038 PRINTTAB(20)"[145][221][154] 1 [146][221][221][154] 2 [146][221][221][154] 3 [146][221][221][149] + [146][221]" 5040 PRINTBT$ 5042 PRINTTP$ 5044 PRINTTAB(20)"[145][221][154] 0 [146][221][221]SGN[146][221][221]CNV[146][221][221][149] = [146][221]" 5046 PRINTTAB(20)"[145][173][192][192][192][189][173][192]@[192][189][173][192]_[192][189][173][192][192][192][189]" 5050 FORI=217TO242:POKEI,PEEK(I)OR128:NEXT 5060 PRINT"[129] L O A D S T A R 5070 [153]" P R E S E N T S 6000 PRINT"[159] JOHN M. CAMPBELL'S " 6001 PRINT" " 6002 PRINT" [174] [176] [176][192][192][174] [174] [176] " 6004 PRINT" [221] [221] [221] [173][174] [176][189] " 6006 PRINT" [171][192][192][179] [171][192][179] [171][192][179] " 6008 PRINT" [221] [221] [221] [176][189] [173][174] " 6010 PRINT" [189] [173] [173][192][192][189] [189] [173] " 6011 PRINT" " 6012 PRINT" [176][192][192][174] [176][192][192][174] [174] [176][192][192][174] " 6014 PRINT" [221] [189] [221] [221] [221] [221] [189] " 6016 PRINT" [221] [171][192][192][179] [221] [221] " 6018 PRINT" [221] [174] [221] [221] [221] [221] [174] " 6020 PRINT" [173][192][192][189] [189] [173] [173][192][192][189][173][192][192][189] " 6090 RETURN 10000 OPEN15,8,15,"S0:HEX CALC.BAS":CLOSE15:SAVE"HEX CALC.BAS",8:END 40000 A$="HELLO CONNECT":FORI=8TO9:CLOSE2:OPEN2,I,2:CLOSE2:IFSTTHEN40020 40010 CLOSE15:OPEN15,I,15,"R0:"+A$+"="+A$:INPUT#15,ER:CLOSE15:IFER=63THEN40030 40020 NEXT:PRINT"[147]":POKE2048,0:POKE44,8:POKE53272,23:POKE186,8:END 40030 POKE646,PEEK(53281):PRINT"[147]LOAD"CHR$(34)A$CHR$(34)","I 40040 PRINT"RUN":POKE44,8:POKE2048,0:POKE631,13:POKE632,13:POKE198,2:END 60000 PRINT"[147]":Z$=" [152] ":POKE214,10:PRINT 60010 PRINT" [155][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184][184]":FORI=0TO8:PRINTZ$:NEXT 60020 PRINT" [151][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][185][152]" 60030 Z$(0)="[200] [197] [216] [195] [193] [204] [195] [213] [204] [193] [212] [207] [210]":Z$(1)="BY [202]OHN [205]. [195]AMPBELL 60040 Z$(2)[178]"(LEN) 1994 BY (null)OFTDISK, RIGHT$NC."[170][199](13) 60050 Z$(3)[178]"(null)HIS PROGRAM IS THE COPYRIGHTED WORK 60060 Z$(4)="OF [211][207][198][212][196][201][211][203] [208][213][194][204][201][211][200][201][206][199]. [201]T IS NOT" 60070 Z$(5)="SHAREWARE OR IN THE PUBLIC DOMAIN." 60090 POKE214,12:PRINT 60100 FORI=0TO5:PRINTTAB(20-(LEN(Z$(I))/2))""Z$(I):NEXT:RETURN